/*
    请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作（push、pop、peek、empty）：

    实现 MyQueue 类：
    void push(int x) 将元素 x 推到队列的末尾
    int pop() 从队列的开头移除并返回元素
    int peek() 返回队列开头的元素
    boolean empty() 如果队列为空，返回 true ；否则，返回 false
 */

// 1.实现一个堆栈类
let MyQueue = function() {
    this.inStack = []
    this.outStack = []
}
// 2.添加push方法(数据进输入栈)
MyQueue.prototype.push = function(x) {
    this.inStack.push(x)
}
// 3.添加pop方法(输入栈数据全部来到输出栈中, 后进先出方式出栈与入栈, 输出栈输出第一个元素)
MyQueue.prototype.pop = function() {
    if (!this.outStack.length) {
        this.inToOut()
    }
    return this.outStack.pop()
}
// 4.添加peek方法(输入栈数据全部来到输出栈, 后进先出方式出栈与入栈, 输出栈输出最后一个元素)
MyQueue.prototype.peek = function() {
    if (!this.outStack.length) {
        this.inToOut()
    }
    return this.outStack[this.outStack.length - 1]
}
// 5.添加empty方法(输入栈与输出栈的判空)
MyQueue.prototype.empty = function() {
    return this.inStack.length === 0 && this.outStack.length === 0
}
// 6.单独添加inToOut方法(将输入栈的数据全部push到输出栈中)
MyQueue.prototype.inToOut = function() {
    while(this.inStack.length) {
        this.outStack.push(this.inStack.pop())
    }
}
let testQueue = new MyQueue()
testQueue.push(100)